package interfaces;

import board.Board;
import algorithm.AlgorithmEx;

/**
 * Interfejs, ktory powinnien byc implementowany przez klase "algorytm" (pisany przez Adama).
 * W tym interfejsie autorzy innych blokow powinni wpisac metody jakich oczekuja od algorymtu.
 * @author Kuba
 *
 */
public interface AlgorithmInterface {
	
	/**
<<<<<<< .mine
	 * Jest to metoda rozwiazujaca nasz problem n-puzzli, wywolywana z poziomu GUI
	 * @param initialState Poczatkowy stan planszy, z wygenerowanym losowym ustawieniem elementow
	 * @return Informacje o wyniku dzialania algorytmu
=======
	 * Jest to metoda rozwi�zuj�ca nasz problem n-puzzli, wywo�ywana z poziomu GUI
	 * @param initialState Pocz�tkowy stan planszy, z wygenerowanym losowym ustawieniem element�w
	 * @param finishState wersja finalnej planszy
	 * @return Informacje o wyniku dzia�ania algorytmu
>>>>>>> .r14
	 */
	public Info solve(Board initialState);
	
	/**
	 * Ta funkcja zwraca aktualny stan ukladanki. MUSI BYC SYNCHRONIZOWANA - skoro robimy na watkach
	 * to w trakcie pobierania zasob nie moze sie zmieniac�.
	 * @return Wynik algorytmu
	 * @throws AlgorithmEx Taki wyjątek cowyżuca jak nie dięodczytać np jak algorytm jeszcze nie działa
	 */
	public Board getActualState() throws AlgorithmEx;
	
	/**
	 * Zwraca infrmacje o dzialaniu algorytmu przed przedwczesnym zakonczeniem
	 * @return Informacje o dotychczasowych dokonaniach algorytmu
	 */
	public Info getAlgorithmInfo();

}
